/*
    Speedbump aka Project Kimbula
    Copyright (C) 2010  Ping Shin Ching

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see http://www.gnu.org/licenses.

	Ping Shin Ching
	righteous.ninja@gmail.com OR ping_sc@hotmail.com
	More information at http://www.tidytutorials.com/p/speedbump.html
 */


#ifndef iptables_h
#define iptables_h

#include "filter.h"

/*
 *	Define the maximum number of ips to hold in memory
 */ 
#define MAX_IPTABLE_IPS		1000


/*
 * Define the maximum tick number. maxburst/avg_connections_per_second
 */
#define MAX_TICKS_PER_IP	10


typedef struct{
	unsigned int hits;
	unsigned int time;
}TickMark;

typedef struct{
	 char* ipaddress[FILTER_ADDRSTRLEN];
	time_t lastupdatedtime;
	TickMark* ticks;
}IPCounter;


class LimitBurstFilter : public FilterInterface{
	int numberofticks;
	int numberofips;
	IPCounter* ipcounter;
	int peak;
	int avg;
	unsigned int odometer;

public:
	LimitBurstFilter();
	~LimitBurstFilter();
	int InitFilter(InitInterface*);
	int DoFilter(const char*, FILTER_TYPE, FilterData*);

	const char* GetFilterName();
	const char* GetFilterRedirect();
	int	GetFilterType();

private:
	int limitburstRealloc();
	char* filterRedirect;
};

#endif
